package com.aliatry.excel.listener;

import cn.hutool.json.JSONUtil;
import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import lombok.Getter;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;

/**
 * Excel监听器
 *
 * @author Simon
 */
@Slf4j
public class ExcelListener<T> extends AnalysisEventListener<T> {

    /**
     * 自定义用于暂时存储data
     * 可以通过实例获取该值
     */
    @Getter
    @Setter
    private List<T> data = new ArrayList<>();

    /**
     * 通过 AnalysisContext 对象还可以获取当前 sheet,当前行等数据
     */
    @Override
    public void invoke(T object, AnalysisContext context) {
        // 数据存储到list,供批量处理,或后续自己业务逻辑处理
        data.add(object);
        // 根据自己业务做处理
        doSomething(object);
    }

    private void doSomething(T object) {
        log.debug("object -> {}", JSONUtil.toJsonStr(object));
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext context) {
        // 解析结束销毁不用的资源
//        data.clear();
    }
}